/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package analiseSintatica;

import AnaliseLexicaFinal.EstruturaDeDados.LinkToken;
import analiseSemantica.ErroSemantico;
import analiseSemantica.estruturadedados.Escopo;
import analiseSintatica.Regras.Blocos.RegraPrograma;
import analiseSintatica.estruturadados.Arvore;
import analiseSintatica.estruturadados.ErroSintatico;

import java.util.ArrayList;
import java.util.LinkedList;

/**
 *
 * @author amferraz
 */
public class AnalisadorSintatico{

    private LinkedList<LinkToken> tokens = new LinkedList<LinkToken>();
    public ErroSintatico erros;
    public Arvore arvore;
    public static Escopo escopoatual;
    public static ArrayList<ErroSemantico> errosemanticos = new ArrayList<ErroSemantico>();

    public AnalisadorSintatico(LinkedList<LinkToken> tokens) {
        this.tokens = tokens;
    }

    public void analisar(){
    	errosemanticos = new ArrayList<ErroSemantico>();
    	try {
    		RegraPrograma.getInstance().analisar(tokens);
		} catch (ErroSintaticoException e) {
//			e.printStackTrace();
			erros = new ErroSintatico(e.getErros().getErro(), e.getErros().getCorreto(), e.getErros().getLinha());
		}
    }
    
    /**
     * @return the listaTokens
     */
    public LinkedList<LinkToken> getListaTokens() {
        return this.tokens;
    }

    /**
     * @return the arvoreDerivacao
     */
    public Arvore getArvore() {
        return this.arvore;
    }
}
